package com.itaming.lycheeframework.support.utils;

import lombok.experimental.UtilityClass;

import java.util.regex.Pattern;

/**
 * Regex工具类
 *
 * @author A.Ming
 */
@UtilityClass
public class RegexUtil {

    /**
     * 大陆身份证号码
     */
    private static final Pattern CHINESE_ID_CARD = Pattern.compile("^([1-9]\\d{5})((19|20)\\d{2})((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)(\\d{3}[Xx\\d])$");

    /**
     * 大陆手机号码
     */
    private static final Pattern CHINESE_MOBILE = Pattern.compile("^1[3-9]\\d{9}$");

    /**
     * 大陆电话号码
     */
    private static final Pattern CHINESE_PHONE = Pattern.compile("^(\\d{3,4}-)?(\\d{7,8})$");

    /**
     * 是否是大陆身份证号码
     *
     * @param value 待匹配的字符串
     * @return boolean
     */
    public static boolean isChineseIdCard(String value) {
        return matches(value, CHINESE_ID_CARD);
    }

    /**
     * 是否是大陆手机号码
     *
     * @param value 待匹配的字符串
     * @return boolean
     */
    public static boolean isChineseMobile(String value) {
        return matches(value, CHINESE_MOBILE);
    }

    /**
     * 是否是大陆电话号码
     *
     * @param value 待匹配的字符串
     * @return boolean
     */
    public static boolean isChinesePhone(String value) {
        return matches(value, CHINESE_PHONE);
    }

    /**
     * 是否匹配
     *
     * @param value 待匹配的字符串
     * @param regex 正则表达式
     * @return
     */
    public static boolean matches(String value, String regex) {
        return matches(value, Pattern.compile(regex));
    }

    /**
     * 是否匹配
     *
     * @param value   待匹配的字符串
     * @param pattern 正则表达式模式
     * @return
     */
    public static boolean matches(String value, Pattern pattern) {
        return value != null && pattern != null && pattern.matcher(value).matches();
    }

}
